6. 指令分组表
本章逐条列出全部 919 条指令。分组与功能模型的语义单元对应:int 241 / fp 178 / fp64+sfu 64 / lsu 301 / xlane 37 / misc 16,tex/gfx 82 条在 §7(unsupported)。每组的子表按编码族划分;语义列为一行摘要,逐条完整语义以 YAML semantics 字段为准(本文含勘误 v0.1.2 修正)。
6.0 列说明与 flag 图例
- 操作数:
字段:类型。类型缩写:v= vreg(向量寄存器)、vp= vpair(64 位对)、h= vreg16(半寄存器)、u= ureg(uniform)、up= upair、d4/d8= 描述符、sN/uN= 有/无符号立即数(N 位)、k32= 32 位原始立即数、ln7= lane 号、at7= 属性槽(location*4+comp)、t7/t12= tile/texel 偏移、o22/o19/o17= 分支偏移(×4 字节)、j10= 间接偏移、c_vm…c_sm= waitcnt 字段、rm/cpol/dim/csr= 枚举、mod3= 源修饰位。^N= 连续 N 个寄存器;*= tied(目的兼作源)。 - 编码:格式 +
fixed字段(十六进制)。位图见 §2.2;match/mask 以 YAML 为准。 - 延迟:
fixed:n= n 周期后写回;async:c= 由 waitcnt 的c计数器跟踪(§2.6)。 - 标志:
| 缩写 | flag | 含义 |
|---|---|---|
ei | exec_ignored | 独立于 EXEC 执行(uniform、控制或显式 lane 操作) |
re | reads_exec | 把 EXEC 当数据输入 |
we | writes_exec | 修改 EXEC |
eb | ends_block | 可能转移控制或结束 warp(基本块边界) |
br | branch | 立即数为相对本指令地址的 PC 相对字节偏移 |
ix | indirect | 目标在 u 寄存器中(32 位代码偏移) |
cal | call | 把返回地址 PC+4 写入 u 寄存器 |
cd | cond | 条件控制转移 |
tm | terminates | 结束整个 warp |
mt | may_trap | 可能产生陷阱 |
sz | serializing | 等待此前固定延迟工作完成,后续指令可见其效果 |
sy | sync | 同步(屏障、互锁、waitcnt) |
ld | load | 读内存 |
st | store | 写内存 |
at | atomic | 读改写内存 |
co | cache_op | cache 维护操作(内存模型构件) |
bc | bounds_checked | 越界或 null:load 读 0,store/atomic 丢弃 |
db | desc_based | 使用 u 内描述符(全零 = null) |
sp | sparse_status | rsd=1 时额外 dword 收到 residency code(0 = resident) |
fm | fp_mode | 结果依赖 MODE(舍入 / 次正规处理) |
rmo | rm_override | 有显式 rm 操作数;dyn 使用 MODE |
ap | approx | 近似结果(误差界见语义列) |
opt | optional | 配置可不实现,驱动报告能力 |
wqm | needs_wqm | 读 2x2 quad 邻居,需 whole-quad 模式 |
fo | frag_only | 仅 fragment/tile shader |
p64 | pair64 | 使用 64 位寄存器对(偶对齐) |
h16 | half16 | 操作 16 位半 |
ur | uniform_result | 把 per-lane 数据归约到 uniform |
xl | cross_lane | 读取其他 lane |
ir | indexed_reg | 寄存器号运行时计算(相对寻址) |